package com.mpaster.meego;

import com.mpaster.meego.dao.RoleRepository;
import com.mpaster.meego.dao.UserRepository;
import com.mpaster.meego.entity.Role;
import com.mpaster.meego.entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.util.HashSet;
import java.util.Set;

@SpringBootApplication
public class MeegoApplication {

    private static final Logger log = LoggerFactory.getLogger(MeegoApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(MeegoApplication.class, args);
    }

    @Bean
    public CommandLineRunner demo(UserRepository repository, RoleRepository roleRepository) {
        return (args) -> {
//            Role adminRole = new Role("admin");
//            Role auditRole = new Role("auditor");
//            Set<Role> roles = new HashSet<>();
//            roles.add(adminRole);
//            //roles.add(auditRole);
//            // save a couple of users
//            User user1 = new User("Jack", "Bauer");
//            user1.setRoles(roles);
//            repository.save(user1);
//            repository.save(new User("Chloe", "O'Brian"));
//            repository.save(new User("Kim", "Bauer"));
//            repository.save(new User("David", "Palmer"));
//            repository.save(new User("Michelle", "Dessler"));
//
//            Set<User> adminUsers = new HashSet<>();
//            Set<User> auditUsers = new HashSet<>();
//
//            // fetch all users
//            log.info("Users found with findAll():");
//            log.info("-------------------------------");
//            for (User user : repository.findAll()) {
//                auditUsers.add(user);
//                log.info(user.toString());
//            }
//            log.info("");
//
//            // fetch an individual user by ID
//            repository.findById(1L)
//                    .ifPresent(user -> {
//                        log.info("User found with findById(1L):");
//                        log.info("--------------------------------");
//                        log.info(user.toString());
//                        log.info("");
//                    });
//
//            // fetch users by last name
//            log.info("User found with findByLastName('Bauer'):");
//            log.info("--------------------------------------------");
//            repository.findByLastName("Bauer").forEach(bauer -> {
//                adminUsers.add(bauer);
//                log.info(bauer.toString());
//            });
//            // for (User bauer : repository.findByLastName("Bauer")) {
//            // 	log.info(bauer.toString());
//            // }
//
//            adminRole.setUsers(adminUsers);
//            roleRepository.save(adminRole);
//            auditRole.setUsers(auditUsers);
//            roleRepository.save(auditRole);
        };
    }


}

